/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Expertos;

import Entidades.Biometria;
import Entidades.Distrito;
import Entidades.Domicilio;
import Entidades.Empleado;
import Entidades.EmpleadoJornada;
import Entidades.JornadaLaboral;
import Entidades.Oficina;
import Entidades.Usuario;
import Excepciones.NonexistentEntityException;
import Persistencia.JPAControllerEmpleado;
import Persistencia.JpaController;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 *
 * @author diego
 */
public class ExpertoEmpleado {

    Date fechaactual = new Date();
    Domicilio domicilio = new Domicilio();
    Empleado emple = new Empleado();
    EmpleadoJornada ejl = new EmpleadoJornada();
    Biometria bio = new Biometria();
    Biometria bio2 = new Biometria();

    public List<Empleado> buscarEmpleadosValidos() {
        List<Empleado> listaempleados;
        JPAControllerEmpleado jpap = new JPAControllerEmpleado();
        listaempleados = jpap.buscarPorVigencia(true);
        return listaempleados;
    }

    public void modificarEmpleado(Empleado empleado, Calendar fechanac, String sexo, String nombre, String apellido, int anti, String estadocivil, String legajo,
            String cuil, String du, String email, String nacionalidad, JornadaLaboral idJornada, Oficina idOficina, String tipoDU, String telefono, Distrito idDistrito, String barrio, String calle, String nroCalle, String nroDpto, String piso) {
        Domicilio dom = empleado.getIdDomicilio();
        /////primero actualizo el domicilio y luego lo seteo a la oficina
        JpaController jpa = new JpaController();
            dom.setIdDistrito(idDistrito);
            dom.setBarrio(barrio);
            dom.setCalle(calle);
            dom.setNroCalle(nroCalle);
            dom.setNroDpto(nroDpto);
            dom.setPiso(piso);
            jpa.begin();
            jpa.edit(dom);
            jpa.commit();
            empleado.setIdDomicilio(dom);
            empleado.setNombre(nombre);
            empleado.setApellido(apellido);
            empleado.setAntiguedad(anti);
            empleado.setEstadoCivil(estadocivil);
            empleado.setLegajoEmpleado(legajo);
            empleado.setCuit(cuil);
            empleado.setNroDU(du);
            empleado.setEmail(email);
            empleado.setNacionalidad(nacionalidad);
            empleado.setFechaNacimiento(fechanac.getTime());
            empleado.setSexo(sexo);
            List<EmpleadoJornada> ejLista = empleado.getEjLista();
            for (EmpleadoJornada empleadoJornada : ejLista) {
                if (empleado.getIdEmpleado() == empleadoJornada.getIdEmpleadoJornada()) {
                    empleadoJornada.setIdJornadaLaboral(idJornada);
                }
            }
            empleado.setIdOficina(idOficina);
            empleado.setTipoDU(tipoDU);
            empleado.setTel(telefono);
            List<EmpleadoJornada> ejListado = empleado.getEjLista();
            for (EmpleadoJornada empleadoJornada : ejListado) {
                if (empleado == empleadoJornada.getIdEmpleado()) {
                    empleadoJornada.setFechaFinEJ(fechaactual);
                }
            }
        jpa.begin();
        jpa.edit(empleado);
        jpa.commit();
    }

    public Empleado nuevoEmpleado(String nombre, String apellido, int anti, String estadocivil, String legajo, String cuil, String du, String email, String nacionalidad, Oficina idOficina, String tipoDU, String telefono, Distrito idDistrito, String barrio, String calle, String nroCalle, String nroDpto, String piso, Calendar fechanac, String sexo, Date fechaBaja) {
        JpaController jpa = new JpaController();
        domicilio.setIdDistrito(idDistrito);
        domicilio.setBarrio(barrio);
        domicilio.setCalle(calle);
        domicilio.setNroCalle(nroCalle);
        domicilio.setNroDpto(nroDpto);
        domicilio.setPiso(piso);
        jpa.begin();
        jpa.create(domicilio);
        jpa.commit();
        emple.setIdDomicilio(domicilio);
        emple.setNombre(nombre);
        emple.setApellido(apellido);
        emple.setAntiguedad(anti);
        emple.setEstadoCivil(estadocivil);
        emple.setLegajoEmpleado(legajo);
        emple.setCuit(cuil);
        emple.setNroDU(du);
        emple.setEmail(email);
        emple.setNacionalidad(nacionalidad);
        emple.setIdOficina(idOficina);
        emple.setFechaAltaEmpleado(fechaactual);
        emple.setFechaNacimiento(fechanac.getTime());
        emple.setFechaBajaEmpleado(fechaBaja);
        emple.setSexo(sexo);
        emple.setTipoDU(tipoDU);
        emple.setTel(telefono);
        emple.setVigente(true);
        jpa.begin();
        jpa.create(emple);
        jpa.commit();
        return emple;
    }

    public void asignarJL(Empleado empleado, EmpleadoJornada ejl2, JornadaLaboral jle) {
        JpaController jpa = new JpaController();
        jpa.begin();
        jpa.create(ejl2);
        jpa.commit();
    }

    public void guardarHuella(Empleado e, ByteArrayInputStream fingerprintData) throws IOException {
        JpaController jpa = new JpaController();
        byte[] array = new byte[fingerprintData.available()];
        fingerprintData.read(array);
        bio.setHuellaUsada(array);
        bio.setIdEmpleado(e);
        jpa.begin();
        jpa.create(bio);
        jpa.commit();
    }

    public void actualizarHuella(Empleado e, ByteArrayInputStream fingerprintData) throws IOException {
        JpaController jpa = new JpaController();
        Biometria biometria = e.getBio();
        byte[] array = new byte[fingerprintData.available()];
        fingerprintData.read(array);
        biometria.setHuellaUsada(array);
        biometria.setIdEmpleado(e);
        jpa.begin();
        jpa.edit(biometria);
        jpa.commit();
    }

    public List<Biometria> buscarTodasLasHuellas() {
        List<Biometria> todas;
        JpaController jpa = new JpaController();
        todas = jpa.findEntities(Biometria.class);
        return todas;
    }

    public List<Empleado> buscarEmpleadoLegajo(String legajo) {
        List<Empleado> listaEmpleados;
        JPAControllerEmpleado jpap = new JPAControllerEmpleado();
        listaEmpleados = jpap.buscarPorLegajo(legajo);
        return listaEmpleados;
    }

    public List<Empleado> buscarEmpleadoDU(String du) {
        List<Empleado> listaEmpleados;
        JPAControllerEmpleado jpap = new JPAControllerEmpleado();
        listaEmpleados = jpap.buscarPorDU(du);
        return listaEmpleados;
    }

    public void eliminarHuella(Biometria identificado) throws NonexistentEntityException {
        JpaController jpa = new JpaController();
        jpa.begin();
        jpa.destroy(identificado.getClass(), identificado.getIdBiometria());
        jpa.commit();
    }

    public void eliminarEmpleado(Empleado e1) throws NonexistentEntityException {
        JpaController jpa = new JpaController();
        e1.setVigente(false);
        e1.setFechaBajaEmpleado(fechaactual);
        jpa.begin();
        jpa.edit(e1);
        jpa.commit();
        ////Ahora doy de baja el usuario del empleado
        Usuario usuario2 = e1.getUsuario2();
        if(usuario2 != null){
        usuario2.setUsuarioActivo(false);
        jpa.begin();
        jpa.edit(usuario2);
        jpa.commit();
        }        
        ///Elimino biometria si tiene
        if(e1.getBio()!= null){
            eliminarHuella(e1.getBio());
        }
    }

    public Biometria buscarBio(Empleado ide) {
        JPAControllerEmpleado jpap = new JPAControllerEmpleado();
        bio2 = jpap.buscarBio(ide);
        return bio2;
    }
}
